package com.empresa.piloto01.tipopessoa.dao;

import java.util.HashMap;
import java.util.List;

import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import org.springframework.stereotype.Repository;

import com.empresa.piloto01.JdbcDaoSupport;
import com.empresa.piloto01.tipopessoa.entity.TipoPessoa;

@Repository
public class TipoPessoaDaoImpl extends JdbcDaoSupport implements TipoPessoaDao {

	@Override
	public TipoPessoa save(TipoPessoa e) {
		HashMap<String, Object> args = new HashMap<String, Object>();
		args.put("descricao", e.getDescricao());

		e.setId(new SimpleJdbcInsert(getJdbcTemplate().getDataSource())
				.withTableName("tipo_pessoa").usingGeneratedKeyColumns("id")
				.executeAndReturnKey(args).longValue());

		return e;
	}

	@Override
	public void update(TipoPessoa e) {
		Object[] args = { e.getDescricao(), e.getId() };
		String sql = "update tipo_pessoa set descricao = ? where id = ?";
		getJdbcTemplate().update(sql, args);
	}

	@Override
	public void delete(Long id) {
		String sql = "delete from tipo_pessoa where id = ?";
		getJdbcTemplate().update(sql, id);
	}

	@Override
	public TipoPessoa findById(Long id) {
		String sql = "select * from tipo_pessoa where id = ?";
		Object[] args = { id };
		return getJdbcTemplate().queryForObject(sql, args,
				new TipoPessoaRowMapper());
	}

	@Override
	public List<TipoPessoa> findAll(int limit, int offset) {
		String sql = "select * from tipo_pessoa order by lower(descricao) limit ? offset ?";
		Object[] args = { limit, offset };
		return getJdbcTemplate().query(sql, args, new TipoPessoaRowMapper());
	}

	@Override
	public int count() {
		String sql = "select count(id) from tipo_pessoa";
		return getJdbcTemplate().queryForInt(sql);
	}

}
